package com.xth8013.as.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.xth8013.as.domain.User;
import com.xth8013.as.util.UserQueryHelper;

/**
 * 
 * @Description:
 * @author: tianhua.xie
 * @Date: 2017年4月3日 下午9:39:52
 *
 */
public interface UserDao {

	/**
	 * 新增用户信息
	 * 
	 * @param user
	 * @return
	 */
	int insert(User user);

	/**
	 * 根据用户账号，查找用户信息
	 * 
	 * @param userAccount
	 * @return
	 */
	User selectByAccount(String userAccount);

	/**
	 * 根据用户id，查找用户信息
	 * 
	 * @param userId
	 * @return
	 */
	User selectById(Integer userId);

	/**
	 * 根据用户账号，删除用户信息
	 * 
	 * @param userId
	 * @return
	 */
	int deleteById(Integer userId);

	/**
	 * 更新用户信息
	 * 
	 * @param user
	 * @return
	 */
	int update(User user);

	/**
	 * 加载所有的用户信息
	 * 
	 * @return
	 */
	List<User> loadAllUsers();

	/**
	 * 根据查询条件,查找所有的用户信息
	 * 
	 * @param currentPage
	 * @param pageSize
	 * @param paramMap
	 *            查询条件
	 * @return
	 */
	Map<String, Object> listUser(int currentPage, int pageSize, Map<String, Object> paramMap);

	/**
	 * 根据查询帮助类,获取用户信息的条数
	 * 
	 * @param helper
	 * @return
	 */
	Integer cntUsersByHelper(UserQueryHelper helper);

	/**
	 * 根据查询条件,查找所有的用户信息
	 * 
	 * @param helper
	 * @return
	 */
	List<User> loadAllUsersByHelper(UserQueryHelper helper);

	/**
	 * 新增用户的角色信息
	 * 
	 * @param userId
	 * @param roleId
	 */
	void insertUserRole(@Param(value = "userId") Integer userId, @Param(value = "roleId") Integer roleId);

	/**
	 * 
	 * @param userId
	 * @return
	 */
	List<Integer> loadUserRoleByUserId(@Param(value = "userId") Integer userId);

	/**
	 * 
	 * @param userId
	 */
	void deleteUserRolesByUserId(@Param(value = "userId") Integer userId);

	/**
	 * 
	 * @param userId
	 * @param selectRoleIds
	 */
	void insertUserRoles(@Param(value = "userId") Integer userId,
                         @Param(value = "selectRoleIds") List<Integer> selectRoleIds);

	/**
	 * 
	 * @param decUserIds
	 */
	void deleteUsersByIds(@Param(value = "decUserIds") String decUserIds);

	/**
	 * 
	 * @param decUserIds
	 */
	void deleteUserRolesByIds(@Param(value = "decUserIds") String decUserIds);

}
